package com.example.hrsystem.workflow;

/**
 * 审批状态枚举类
 * 定义审批流程中的各种状态
 */
public enum ApprovalStatus {
    /**
     * 待审批：申请已提交但尚未处理
     */
    PENDING("待审批", "PENDING"),
    
    /**
     * 审批中：申请正在处理中
     */
    IN_PROGRESS("审批中", "IN_PROGRESS"),
    
    /**
     * 已批准：申请已被批准
     */
    APPROVED("已批准", "APPROVED"),
    
    /**
     * 已拒绝：申请已被拒绝
     */
    REJECTED("已拒绝", "REJECTED"),
    
    /**
     * 已撤销：申请被申请人撤销
     */
    CANCELLED("已撤销", "CANCELLED"),
    
    /**
     * 已完成：申请已处理完毕（无论批准还是拒绝）
     */
    COMPLETED("已完成", "COMPLETED");
    
    private final String displayName;
    private final String value;
    
    ApprovalStatus(String displayName, String value) {
        this.displayName = displayName;
        this.value = value;
    }
    
    /**
     * 获取状态的显示名称
     * @return 显示名称
     */
    public String getDisplayName() {
        return displayName;
    }
    
    /**
     * 获取状态的值
     * @return 状态值
     */
    public String getValue() {
        return value;
    }
    
    /**
     * 根据状态值获取枚举实例
     * @param value 状态值
     * @return 枚举实例
     */
    public static ApprovalStatus fromValue(String value) {
        for (ApprovalStatus status : ApprovalStatus.values()) {
            if (status.value.equalsIgnoreCase(value)) {
                return status;
            }
        }
        return PENDING; // 默认返回待审批状态
    }
    
    /**
     * 判断是否是终态（不再变化的状态）
     * @return 是否是终态
     */
    public boolean isFinalState() {
        return this == APPROVED || this == REJECTED || this == CANCELLED || this == COMPLETED;
    }
    
    /**
     * 判断是否是成功状态
     * @return 是否是成功状态
     */
    public boolean isSuccess() {
        return this == APPROVED;
    }
    
    /**
     * 判断是否是失败状态
     * @return 是否是失败状态
     */
    public boolean isFailure() {
        return this == REJECTED;
    }
    
    /**
     * 判断是否是进行中状态
     * @return 是否是进行中状态
     */
    public boolean isInProgress() {
        return this == PENDING || this == IN_PROGRESS;
    }
}